Coding schemes are regularly used in connection with the transmission of data. For example, in digital communication systems, data is typically transmitted as a series of code words. In general, each code word is assigned a unique pattern of bits, with each bit consisting of either a zero or a one. In most such digital communication systems, the number of bits that may be used to define code words is limited. Therefore, it is desirable to encode data such that a maximum number of code words (i.e., bit patterns) are available as code words. It is also desirable to reduce the effect of errors that may occur in transmitting code words across the communication channel.
In many digital systems, errors in the detection, transmission or reading of bit patterns may occur. For example, certain bit patterns may result, on occasion, in certain bits being “flipped.” The particular bit patterns that are susceptible to flipping are generally determined by the system under consideration. Such errors may be identified as dominant errors if they are much more likely to occur than errors due to random effects, such as noise.
In a typical coding scheme, a code word that is read incorrectly due to the occurrence of a dominant error can result in a very large discrepancy. That is, the value of the original code word can be very different from the code word that is actually read. In general, this is because the strategies used to assign values to code words do not take into consideration the dominant errors that may be associated with a system.
Modulation codes have been used to aid in the transmission and reception of data. Such codes are designed to avoid code words that are particularly susceptible to being misread. For example, code words having a string of identical bits of at least a certain length may be susceptible to detecting one or more of the bits as its opposite. A modulation code designed to avoid such a “bit flipping” event may eliminate as valid code words any pattern of bits that includes more than the allowed number of identical bits in a row. However, such “run length limited” codes reduce the efficiency of the code space by eliminating what would otherwise be valid code words.
Coding schemes have also been developed to detect, and in some instances correct, errors that occur during the transmission and reception of the data. Error control codes include parity checking codes and error correction codes. In a typical parity code, an extra bit is assigned to tracking whether the detected code word should contain an even or odd number of ‘1’ bits. Upon detection of the code word, if the parity code does not agree with the code word (e.g., the detected code word contains an even number of 1's, but the parity code indicates that it should contain an odd number of 1's), it can be assumed that an error occurred during transmission or reception of the code word. If the coding scheme used is a simple parity checking scheme, no correction is generally possible, and the received code word is discarded. In a typical error correcting code, more than one parity or error control bit is used to enable at least some errors to be corrected. However, each bit of a code word dedicated to parity checking or to error correction reduces the efficiency of the coding scheme.
As an example of systems that include a communication channel susceptible to dominant errors, a computer hard disk drive system and a voice communication system will be described. However, it should be appreciated that the present invention is not limited to use in connection with such systems, and can generally be applied to any communication system that is susceptible to dominant errors and that can tolerate some deviation between a value as written and a value as read.
With reference now to FIG. 1, a typical disk drive system 100 is illustrated. The disk drive system 100 is operative for performing data storage and retrieval functions in connection with an external host computer (not illustrated in FIG. 1). The disk drive 100 generally includes a base 104 and magnetic disks 108 (only one of which is shown in FIG. 1). The magnetic disks 108 are interconnected to the base 104 by a spindle motor (not shown) located within or beneath the hub 112, such that the disk 108 can be rotated relative to the base 104. Actuator arm assemblies 116 (only one of which is shown in FIG. 1) are interconnected to the base 104 by a bearing 120. The actuator arm assemblies 116 each include a transducer head 124 at a first end, to address each of the surfaces of the magnetic disks 108. A voice coil motor 128 pivots the actuator arm assemblies 116 about the bearing 120 to radially position the transducer heads 124 with respect to magnetic disks 108. Voice coil motor 128 is operated by a controller 132 that is in turn operatively connected to the host computer (not shown). By changing the position of the transducer heads 124 with respect to the magnetic disk 108, the transducer heads 124 may address different tracks or cylinders 136 on the magnetic disk 108. The disk drive 100 also generally includes a channel 138 for receiving and decoding data read from the disk 108 by the transducer heads 124.
Typically, the data is stored in the concentric tracks 136 as a series of magnetic transitions. In an ideal disk drive system 100, the tracks 136 are non-perturbed circles situated about the center of the disk 108. As such, each of these ideal tracks includes a track centerline that is located at a known constant radius from the disk center. In an actual system, however, it is difficult to write non-perturbed circular tracks 136 to the data storage disk 108. That is, problems such as vibration, bearing defects, inaccuracies in the servo track writer used to write the tracks 136 and disk clamp slippage can result in tracks 136 that are written differently from the ideal non-perturbed circular track shape. The resulting inaccuracies in the shape of the tracks 136 due to such errors is known as written-in and repetitive runout. The perturbed shape of these tracks 136 complicates the positioning of the transducer heads 124 during read and write operations because the disk drive servo system needs to continuously reposition the transducer heads 124 during track following.
In order to at least partially correct the shape of the tracks 136 and to minimize the effects of written-in and repetitive runout, the tracks 136 are periodically encoded with embedded run-out correction (ERC) values. In particular, the embedded run-out correction values serve as corrections to the position error signal (PES) generated during track following.
Although the correction values stored in the ERC fields represent discrete correction amounts, the amount of correction need not be precisely read in order to usefully alter the position error signal read from a track 136 during track following. However, conventional disk drive systems utilizing embedded run-out correction typically discard embedded runout correction values that are not correctly detected by a detector included as part of the channel 138. Accordingly, previous systems have treated embedded runout correction values, which can tolerate at least some variance between the value as originally written and the value as detected, in the same way as user data, which generally must be discarded if errors in the reading of such data occur. Therefore, such conventional methods result in inefficiencies and/or the loss of useful data.
As a further example of a system that includes a communication channel susceptible to dominant errors but that tolerates some variance between an intended value and a received value, consider a digital voice communication system. In general, a human listener is capable of comprehending the meaning of another's speech, even though small portions of the conversation are lost, for example, due to transmission errors. However, breaks in an audible signal due to such errors are annoying and can make a conversation difficult or impossible to follow. Furthermore, typical communication channels used for transmitting voice data are susceptible to dominant errors. In addition, such systems must operate with high efficiency in order to be economical. Therefore, communication systems used for the transmission of voice data could benefit from a coding strategy that minimized the effect of dominant errors in the communication channel, while reducing or eliminating the need to transmit redundant code.
As mentioned above, modulation and error control coding schemes require the recordation and transmission of redundant information in addition to the user data. Although this redundant information allows for the reduction, detection or correction of errors in the transmission of user data, the storage and/or transmission capacity of the system is reduced. In addition, errors that are not detected result in values that may be very different from the intended value. Furthermore, errors that are detected but are not corrected may result in a code word being discarded, with no benefit being derived from the transmission of the discarded data. Therefore, it would be advantageous to provide a coding strategy that was highly efficient, and that minimized the effects of errors. In addition, it would be advantageous to provide a system that could be implemented at low cost, and that was reliable in operation.